package org.lee.other.ext2;

import org.lee.other.ext.Animal;

/**
 * Dog
 * 重载规则:
 * <p>
 * 被重载的方法必须改变参数列表(参数个数或类型不一样)；
 * 被重载的方法可以改变返回类型；
 * 被重载的方法可以改变访问修饰符；
 * 被重载的方法可以声明新的或更广的检查异常；
 * 方法能够在同一个类中或者在一个子类中被重载。
 * 无法以返回值类型作为重载函数的区分标准。
 *
 * @author dralee
 * @date 2022-02-14 13:53:18
 **/
public class Dog extends Animal {
    public Dog(int id, String name) {
        super(id, name);
    }

    @Override
    public void eat() {
        System.out.println("Dog eat");
    }

    @Override
    public Animal info() {
        return super.info();
    }

    // 由于跟父类不同包，无法重写默认访问方法
//    @Override
//    void def() {
//        System.out.println("override the default access method from super class.");
//    }

    public String eat(String something) {
        System.out.println("overload the eat() " + something);
        return something + " Ok";
    }

    public void doIt() {
        System.out.println("Dog do it.");
    }
/**
 * 区别点	重载方法	重写方法
 * 参数列表	必须修改	一定不能修改
 * 返回类型	可以修改	一定不能修改
 * 异常	可以修改	可以减少或删除，一定不能抛出新的或者更广的异常
 * 访问	可以修改	一定不能做更严格的限制（可以降低限制）
 */
}
